﻿namespace LM.Servicos
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using LM.InterfacesFabricas.Utilidades;
    using LM.Negocio;
    using LM.Negocio.Validadores;
    using LM.Repositorios;
    using LM.Repositorios.Interfaces;
    using System.Collections.Generic;

    public class ServicoDeVaga : IServicoDeVaga
    {
        public void Cadastre(DtoVaga vaga)
        {
            var repositorioDeVaga = FabricaDeRepositorios.Crie<IRepositorioDeVaga>();
            var validadorDeVaga = new ValidadorDeVaga(repositorioDeVaga);
            var vagaObjeto = ConversorDeObjetos.Copie<Vaga>(vaga);

            validadorDeVaga.ValideCadastro(vagaObjeto);

            repositorioDeVaga.Cadastre(vagaObjeto);
        }

        public void Atualize(DtoVaga vaga)
        {
            var repositorioDeVaga = FabricaDeRepositorios.Crie<IRepositorioDeVaga>();
            var validadorDeVaga = new ValidadorDeVaga(repositorioDeVaga);
            var vagaObjeto = ConversorDeObjetos.Copie<Vaga>(vaga);

            validadorDeVaga.ValideAtualizacao(vagaObjeto);

            repositorioDeVaga.Atualize(vagaObjeto);
        }

        public void Exclua(int codigo)
        {
            var repositorioDeVaga = FabricaDeRepositorios.Crie<IRepositorioDeVaga>();
            var validadorDeVaga = new ValidadorDeVaga(repositorioDeVaga);
            var vagaObjeto = ConversorDeObjetos.Copie<Vaga>(repositorioDeVaga.Consulte(codigo));

            validadorDeVaga.ValideExclusao(vagaObjeto);

            repositorioDeVaga.Exclua(vagaObjeto);
        }

        public DtoVaga Consulte(int codigo)
        {
            var vagaObjeto = FabricaDeRepositorios.Crie<IRepositorioDeVaga>().Consulte(codigo);

            return ConversorDeObjetos.Copie<DtoVaga>(vagaObjeto);
        }

        public IList<DtoVaga> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoVaga, Vaga>(FabricaDeRepositorios.Crie<IRepositorioDeVaga>().ConsulteTodos());
        }
    }
}
